bool is_prime_simple(unsigned long long int n)
        {
            unsigned long long int k = 6L;
            
            if((n % 2) == 0)
                return (n == 2);
            
            if((n % 3) == 0)
                return (n == 3);

            while(std::pow((k-1),2) <= n)
            {
                if( n % (k-1) == 0 or n % (k+1) == 0)
                    return false;
                k += 6;
            }
            return true;
        }
        
        bool is_prime_raben_miller(long long int prime, int K)
        {
            
        }
        
        unsigned long long int generate_random_prime(int bit, bool(*fptr_primetest)(unsigned long long int))
        {
//            srand(time(NULL));
            auto get_random_t = [] (int bits) { return (rand() | 1 << bits | 1); };
            
            unsigned long long int p = get_random_t(bit);
            
            for(int i=0;;i++)
            {
//                std::cerr<<"            ||| Check prime("<<p<<") round: "<<i<<" \n";
                if(fptr_primetest(p) == true)
                    return p;
                else
                {
//                    std::cerr<<"                ||| No prime was found generate next check!\n";
                    if(i % (bit*2) == 0)
                        p = get_random_t(bit);
                    else
                        p += 2;
                }
            }
            
        }